/* 
抽象类
  不能创建实例对象, 只有实现类才能创建实例
  可以包含未实现的抽象方法,也可以有实现的方法
  抽象类：父类可能根本不需要实现任何方法，因为根据子类的不同，方法实现不同
*/

// 抽象类一般都是让子类去继承，然后实现抽象类内部的抽象方法
// 抽象方法不能有实现（不能写花括号）
// 各个子类去继承抽象类，然后去实现抽象方法，每个类实现的方式不同
// 抽象类是为了做基类，专门用来让子类继承的，本身不能实例化对象
// 子类继承了抽象类，抽象类里面的抽象方法，必须实现，否则子类也没办法实例化对象
 

// 抽象类一般都是作为基类 它不能实例化对象  只能让人继承
// 抽象类一般内部都有抽象方法  抽象方法不能实现  是让继承者去实现的



// 1、抽象类是用来让人继承的，不能实例化
// 2、抽象类内部一般都会有抽象方法，这个方法是让继承者去实现的，本类内部不能实现
// 3、抽象类也可以写实现的方法

abstract class Person {
  // 抽象方法，抽象方法不能写花括号
  // 这个方法被继承后，必须实现
  abstract speak()
  run(){
    console.log('跑');
  }
}


class Japanese extends Person{
  speak() {
    console.log('说鸟语');
  }
  run(): void {
    console.log('拐着跑');
  }
}



let j1 = new Japanese()
j1.run()


